Exemple de déclencheur 1 : exemple simple
Le Robotics_Trigger.project
l'exemple de projet décrit ici se trouve dans le répertoire d'installation de CODESYS sous ..\CODESYS SoftMotion\Examples
.
Les déclencheurs sont utilisés pour savoir exactement quand un groupe d'axes atteint un point spécifique sur la trajectoire commandée. Ces informations peuvent être utilisées, par exemple, pour allumer ou éteindre un outil exactement au bon moment. Cet exemple montre comment un déclencheur unique est commandé sur un mouvement, puis lu de manière cyclique. Sur cette base, le Exemple de déclencheur 2 : Processus de collage projet montre un exemple d'application réaliste.
Structure de la demande
L'application se compose de deux programmes : un Main_PRG
s'exécutant dans la tâche de bus et un Planning_PRG
exécuté dans la tâche de planification du groupe d'axes. De plus, il y a aussi une trace.
Main_PRG
:
Le Main_PRG
programme contient la machine d'état principale de l'application. Les deux premiers états permettent d'initialiser et de mettre sous tension les variateurs et le groupe d'axes. Dans le STATE_COMMAND_MOVEMENT_WITH_TRIGGER
état, un déclencheur est d'abord préparé à l'aide d'une instance de l'état SMC_GroupPrepareTrigger
bloc fonctionnel. La position est spécifiée relativement avec une valeur de 0,6. En conséquence, le déclencheur est placé au point où 60 % du mouvement assigné est terminé. Le déclencheur préparé est affecté au prochain mouvement commandé. Dans cet exemple, un déplacement linéaire vers la position (X=20, Y=10) est commandé par un MC_MoveLinearAbsolute
.
prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative; prepTrigger.Position.MvtPosition := 0.6; prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE); moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);
Dans l'état suivant STATE_ENABLE_READ_TRIGGER
, un exemple de SMC_GroupReadTrigger
est lancé afin de lire l'état du déclencheur commandé. Le lien avec le déclencheur est établi au moyen de la TriggerId
retourné par SMC_GroupPrepareTrigger
.
readTrigger.TriggerId := prepTrigger.TriggerId; readTrigger.Enable := TRUE;
Dans le STATE_CHECK_TRIGGER
état, l'état du déclencheur est enfin vérifié cycliquement. Dès que SMC_GroupReadTrigger
rapports Active
en tant qu'état, la durée jusqu'à ce que le déclencheur soit atteint peut être lue. La durée se réfère toujours au début du cycle en cours. Ainsi, le déclenchement est atteint dans le cycle en cours si la durée est inférieure au temps de cycle (dans cet exemple, 0,004 s) :
IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN triggerFired := TRUE; ... END_IF END_IF
Planning_PRG
Dans le Planning_PRG
programme, la durée prévisionnelle du planning est configurée au moyen du SMC_TuneCPKernel
bloc fonctionnel. Le SMC_GroupReadTrigger
le bloc fonctionnel peut émettre une sortie lorsqu'un déclencheur atteint la durée de prévision. Dans l'exemple, la durée de prévision est fixée à 0,1 s. Par conséquent, le statut de la SMC_GroupReadTrigger
le bloc fonction passe à Active
0,1 s avant que le groupe d'axes n'atteigne le déclencheur et délivre une durée valide à partir de là.
tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);
Trace
La trace peut être utilisée pour suivre le comportement du SMC_GroupReadTrigger
bloc fonctionnel.
Dans le premier diagramme, vous pouvez voir qu'un mouvement est exécuté de (X=0, Y=0) à (X=20, Y=10). La gâchette est située à la position relative 0.6 sur le mouvement, c'est-à-dire à (X=12, Y=6).
Le deuxième diagramme montre la valeur de triggerTime
sortie de SMC_GroupReadTrigger
. La valeur saute à 0,1 s car la durée prévue de la planification est de 0,1 s, puis chute linéairement jusqu'à ce que la valeur 0 soit atteinte à la position (X=12, Y=6).
Le troisième diagramme montre la valeur de triggerFired
variable définie dans le STATE_CHECK_TRIGGER
état de Main_PRG
dès que le groupe d'axes est à moins de 0,004 s du déclencheur.